#include<iostream>
#include<vector>
using namespace std;
const int N=1e3+10;
int n;
int p[N];
bool flag=0;
vector<int> f;
void check(int l,int r)
{
	if(l>r)
	return ;
	int tr=r,tl=l+1;
	if(!flag)
	{
		while(tl<=r&&p[l]>p[tl])tl++;
		while(tr>l&&p[l]<=p[tr])tr--;
	}
	else
	{
		while(tl<=r&&p[l]<=p[tl])tl++;
		while(tr>l&&p[l]>p[tr])tr--;
	}
	if(tl-tr!=1)
	return ;
	check(l+1,tr);
	check(tl,r);
	f.push_back(p[l]);
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	cin>>p[i];
	check(1,n);
	if(f.size()!=n)
	{
		flag=1;
		f.clear();
		check(1,n);
		if(f.size()==n)
		{
			puts("YES");
			for(int i=0;i<f.size()-1;i++)
			cout<<f[i]<<' ';
			cout<<f[f.size()-1];
		}
		else
		puts("NO");
	}
	else
	{
		puts("YES");
	    for(int i=0;i<f.size()-1;i++)
		cout<<f[i]<<' ';
		cout<<f[f.size()-1];
	}
	return 0;
}
